/*
 * Receptor.java
 *
 * Creada el 22 de noviembre de 2007, 01:11 PM
 *
 */

package FachadaInterfaz;

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import CapaLogica.*;
import FachadaDatos.*;

public class Receptor extends HttpServlet {
    
    public Receptor() {}
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.close();
        
        if (request.getParameter("do").equals("cerrarsesion")) {
            desconectarse(request.getSession());
            response.sendRedirect("admin_login.jsp");
            return;
        }
    }
    
    protected void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        
        if (req.getParameter("tipo").equals("entrar"))
            entrar(req, res);
        
        else if (req.getParameter("tipo").equals("admin_login"))
            iniciarSesion(req, res);
        
        else if (req.getParameter("tipo").equals("salir")){
            desconectarse(req.getSession());
            res.sendRedirect("admin_login.jsp");
            
        } else if (req.getParameter("tipo").equals("ingresar_datos_usuario"))
            //cambio MS: se agrego el 1
            ingresarDatosUsuario(req, res, 1);
        
        else if (req.getParameter("tipo").equals("ingresar_solicitud"))
            ingresarDatosSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_solicitud_pre"))
            preIngresoSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_cola"))
            ingresarDatosCola(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_servicio"))
            ingresarDatosServicio(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_recurso"))
            ingresarDatosRecurso(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_seccion"))
            ingresarDatosSeccion(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_perfil"))
            ingresarDatosPerfil(req, res, true);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_dpto"))
            ingresarDatosDepartamento(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_marca"))
            ingresarDatosMarca(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_estado"))
            ingresarEstado(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_prioridad"))
            ingresarPrioridad(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_tipo_recurso"))
            ingresarTipoRecurso(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_tipo_sol"))
            ingresarTipoSolicitante(req, res);
        
        else if (req.getParameter("tipo").equals("ingresar_datos_campos"))
            ingresarDatosCampos(req, res);
        
        else if (req.getParameter("tipo").equals("eliminar_solicitud"))
            eliminarSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("asignar_solicitud"))
            asignarSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("redireccionar_solicitud"))
            redireccionarSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("cerrar_solicitud"))
            cerrarSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("finalizar_solicitud"))
            finalizarSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("buscar_solicitudes"))
            obtenerSolicitudes(req, res);
        
        else if (req.getParameter("tipo").equals("eliminar_seccion"))
            eliminarSeccion(req, res);
        
        else if (req.getParameter("tipo").equals("eliminar_perfil"))
            eliminarPerfil(req, res);
        
        else if (req.getParameter("tipo").equals("eliminar_servicio"))
            eliminarServicio(req, res);
        
        else if (req.getParameter("tipo").equals("reabrir_solicitud"))
            reabrirSolicitud(req, res);
        
        else if (req.getParameter("tipo").equals("modificar_solicitud"))
            modificarSolicitud(req, res);
        //nuevo
        else if (req.getParameter("tipo").equals("modificar_servicio"))
            modificarServicio(req, res);
        //nuevo Gio
         else if (req.getParameter("tipo").equals("eliminar_recurso"))
            eliminarRecurso(req, res);

        else if (req.getParameter("tipo").equals("eliminar_usuario"))
            eliminarUsuario(req, res);
    
        else if (req.getParameter("tipo").equals("eliminar_departamento"))
            eliminarDepartamento(req, res);
        
        else if (req.getParameter("tipo").equals("eliminar_marca"))
            eliminarMarca(req, res);
        
         else if (req.getParameter("tipo").equals("eliminar_solicitante"))
            eliminarTipoSolicitante(req, res);
        //cambio MS:
         else if (req.getParameter("tipo").equals("modificar_datos_usuario"))
            ingresarDatosUsuario(req, res, 0);
        else if (req.getParameter("tipo").equals("modificar_seccion"))
            modificarSeccion(req, res);
        
        else if (req.getParameter("tipo").equals("eliminar_tipoRecurso"))
            eliminarTipoRecurso(req, res);
        
         else if (req.getParameter("tipo").equals("eliminar_estado"))
            eliminarEstado(req, res);
        
         else if (req.getParameter("tipo").equals("eliminar_prioridad"))
            eliminarPrioridad(req, res);
        //nuevo MS 29/05/08
        else if (req.getParameter("tipo").equals("modificar_datos_perfil"))
            ingresarDatosPerfil(req, res, false);
        
        else if (req.getParameter("tipo").equals("busqueda_avanzada"))
            busquedaAvanzada(req, res);
        
        else if (req.getParameter("tipo").equals("modificar_estado"))
            modificarEstado(req, res);
        
        else if (req.getParameter("tipo").equals("modificar_departamento"))
            modificarDepartamento(req, res);
        
          else if (req.getParameter("tipo").equals("modificar_prioridad"))
            modificarPrioridad(req, res);
        
    }
    
    private static void entrar(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        res.sendRedirect("index.jsp");
    }
    
    private static void iniciarSesion(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        req.getSession().setAttribute("error", null);
        
        conectarse(req.getParameter("usuario"), req.getParameter("pass"), req.getSession());
        
        if (req.getSession().getAttribute("error") == null) {
            /* El login es valido. Se procede a entrar a la pagina principal de administracion */
            int idUsr = Consultas.idUsuarioServidor(req.getParameter("usuario"));            
            Perfil p = Consultas.perfilUsuario(idUsr);
            req.getSession().setAttribute("PermisoSolicitud", p.getPermisoSolicitud());
            req.getSession().setAttribute("PermisoSeccion", p.getPermisoSeccion());
            req.getSession().setAttribute("PermisoServicio", p.getPermisoServicio());
            req.getSession().setAttribute("PermisoRecurso", p.getPermisoRecurso());
            req.getSession().setAttribute("PermisoCola", p.getPermisoCola());
            req.getSession().setAttribute("PermisoUsuario", p.getPermisoUsuario());
            req.getSession().setAttribute("PermisoPerfil", p.getPermisoPerfil());
            res.sendRedirect("index.jsp");
        } else {
            /* El login no es valido. Se redirecciona a 'admin_login' para indicar el error al usuario. */
            res.sendRedirect("admin_login.jsp");
        }
    }
    
    private void ingresarDatosSolicitud(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {
            
    if ((req.getParameter("cargardatos")).equals("si")) {       
        String tmp = req.getParameter("usuario_solicitante");
        Solicitante s = new Solicitante();
        String tipo = "";
        try {
            s = verDetalleSolicitante(Integer.parseInt(tmp));
            tipo = tipoSolicitante(s.getId());
            
        } catch (SQLException e) {}
    String tmp1 = ""+s.getId();
    req.getSession().setAttribute("ci_solicitante", tmp1);  
    req.getSession().setAttribute("nombre_solicitante", s.getNombre()); 
    req.getSession().setAttribute("apellido_solicitante", s.getApellido()); 
    String tmp2 = ""+s.getTelefono();
    if (Integer.parseInt(tmp2) != -1)
        req.getSession().setAttribute("telefono_solicitante", tmp2);
    req.getSession().setAttribute("email_solicitante", s.getEmail());
    String tmp3 = "" + s.getTipo();
    req.getSession().setAttribute("tipo_solicitante",tmp3); 
    res.sendRedirect("ingresar_datos_solicitud_1.jsp");
    return;
        
    } else {
        
        Solicitante     st = null;
        Solicitud       sd = null;
        UsuarioServidor us = null;
        boolean    asignar = true;
        java.util.Date fecha = new java.util.Date();
        String hora = fecha.getHours() + ":" + fecha.getMinutes() + ":" +
                      fecha.getSeconds();
        String msgToUser = "";
        String desc = req.getParameter("descripcion_solicitante");        
        int prior = Integer.parseInt(req.getParameter("lista_prioridades"));
        
        /* Primero un poco de validacion sobre los campos del formulario */
        if (!validarIngresoSolicitud(req, res)) {
            System.out.println("validacion fallo");
            /* La validacion fallo, se regresa a la pagina anterior */
            res.sendRedirect("ingresar_datos_solicitud_1.jsp");
            return;
        }
        
        res.sendRedirect("ingresar_datos_solicitud.jsp");
        
        if (req.getParameter("asignar") == null) {
            asignar = false;
        }
        Servicio s = (Servicio) req.getSession().getAttribute("__servicio");
        int idServ = s.getId();
        
        /* Se pregunta si se marco para ingresar un usuario nuevo o existente */
        if (req.getParameter("usuario_sol").equals("0")) {
            /* Se busca utilizar un usuario existente */
            /* Preparo los objetos que se van a insertar en la BD */
            String tmp = req.getParameter("usuario_solicitante");            
            int id_solicitante = Integer.parseInt(tmp);
            int cola = Integer.parseInt(req.getParameter("cola_servicio"));
            
            //Error: se agrega en cola 0 y posicion 0, modificar.
            sd = new Solicitud(-1, desc, id_solicitante, cola, 0, prior,
                                0, fecha, hora);
            
            try {   /* Inserto la solicitud en la BD */
                int id = Insercion.insertarSolicitud(sd);
                sd.setId(id);
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "solicitud en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
            
            /* Inserto los campos asociados con esta solicitud */           
            insertarCampos(sd, req);
            
        } else {
            /* Se busca utilizar un usuario nuevo */
            /* Preparo los objetos a insertar */
            String tmp = req.getParameter("ci_solicitante");
            String nombre = req.getParameter("nombre_solicitante");
            String apellido = req.getParameter("apellido_solicitante");
            String email = req.getParameter("email_solicitante");           
            int id_solicitante = Integer.parseInt(eliminarCeros(tmp));
            
            tmp = req.getParameter("telefono_solicitante");
            int telf_solicitante = Integer.parseInt(eliminarCeros(tmp));
            
            int tipo_solicitante =
                    Integer.parseInt(req.getParameter("lista_tipos_solicitante"));
                        
            st = new Solicitante(id_solicitante, nombre, apellido,
                    telf_solicitante, email, tipo_solicitante);
            int cola = Integer.parseInt(req.getParameter("cola_servicio"));
            
            //Error: se agrega en cola 0 y posicion 0, modificar.
            sd = new Solicitud(-1, desc, id_solicitante, cola, 0, prior, 0, fecha, hora);
            
            /* Inserto el solicitante en la BD */
            Insercion.insertarSolicitante(st);
            
            try {   /* Inserto la solicitud en la BD */
                int id = Insercion.insertarSolicitud(sd);
                sd.setId(id);
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "solicitud en la base de datos.";                    
                    req.getSession().setAttribute("TIPO__MSG__estado", "err");
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
            
            /* Inserto los campos asociados con esta solicitud */
            insertarCampos(sd, req);
        }
        
       /* Inserto el servicio asociado a la solicitud en la BD */
       int codeServ = Insercion.insertarSolicitudRequiereServicio(sd.getId(), idServ);
       
                
        msgToUser = "La solicitud se ingres� exitosamente.";
        int id_servidor = -1;
        String obs = "Asignacion automatica a ningun usuario";
        us = new UsuarioServidor();
        us.setId(-1);
        if (asignar) { 
            
            /* El usuario indico que quiere asignar la solicitud a un *
             * usuario servidor                                       */
             obs = "La asignaci�n fue llevada a cabo de manera " +
                    "autom�tica cuando se ingres� la solicitud " +
                    "en el sistema.";  
            id_servidor = Integer.parseInt(
                    req.getParameter("lista_usuario_servidor"));
            us = new UsuarioServidor();
            us.setId(id_servidor);            
        }      
            
        Insercion.insertarSolicitudAsignadaUsuario(sd, us, obs, fecha, hora);       
        
        req.getSession().setAttribute("MSG__estado", msgToUser);
        req.getSession().setAttribute("TIPO__MSG__estado", "ok");
        return;
    }
    }
    
    private static void ingresarDatosSeccion(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException{
        
        String a = "lista_dpto";
        String b = "ERROR__lista_dpto";
        String c = "Campo obligatorio.";
        int dep_id = -1;        
        req.getSession().setAttribute("MSG__estado", null);
        
        if (validarLista(a, b, c, req)) {
            /* El usuario indico una opcion en la lista de secciones */
            String tmp = req.getParameter("lista_dpto");
            dep_id = Integer.parseInt(tmp);           
        } else {
            res.sendRedirect("ingresar_datos_seccion.jsp");
            return;
        }       
        
        if (!(validarCampo("nombre_seccion", "ingres_name_seccion", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_seccion", "Campo obligatorio");
            res.sendRedirect("ingresar_datos_seccion.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_seccion")).trim().toLowerCase());
        String descripcion = (String) req.getParameter("desc_seccion").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        Seccion seccion = new Seccion();
        seccion.setNombre(nombre);
        seccion.setDescripcion(descripcion);
        seccion.setDepartamento(dep_id);
        
        int i = Insercion.insertarSeccion(seccion);
        
        String mensaje_seccion;
        
        if (i == 2000) {
            mensaje_seccion = "La Secci�n '"+nombre+"' se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_seccion", "ok");
        }
        else if (i == 23505)
            mensaje_seccion = "La secci�n ya existe. No se puede ingresar.";
        else
            mensaje_seccion = "Ocurri� un error al intentar ingresar la secci�n.";
        
        
        req.getSession().setAttribute("mensaje_seccion", mensaje_seccion);
        
        res.sendRedirect("ingresar_datos_seccion.jsp");
        return;
    }
    
    private static void ingresarDatosCola(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException{
        
        if (!(validarCampo("nombre_cola", "ingres_name_cola", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_cola", "Campo obligatorio");
            res.sendRedirect("ingresar_datos_cola.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_cola")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_cola").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        Cola col = new Cola();
        col.setNombre(nombre);
        col.setDescripcion(descripcion);
        
        int i = Insercion.insertarCola(col);
        
        String mensaje_cola;
        
        if (i == 2000) {
            mensaje_cola = "La Cola se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_cola", "ok");
        }
        else if (i == 23505)
            mensaje_cola = "La cola ya existe. No se puede ingresar.";
        else
            mensaje_cola = "Ocurrio un error al intentar ingresar la cola.";        
        
        req.getSession().setAttribute("mensaje_cola", mensaje_cola);
        
        res.sendRedirect("ingresar_datos_cola.jsp");
        return;
    }
    
    private static void ingresarDatosPerfil(HttpServletRequest req, 
            HttpServletResponse res, boolean ingreso)
    throws ServletException, IOException{
        
        if (!(validarCampo("nombre_perfil", "ingres_name_perfil", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_perfil", "Campo obligatorio");
            res.sendRedirect("ingresar_datos_perfil.jsp");
            return;
        }
        String nombre = (String)req.getParameter("nombre_perfil");        
        
        /* Permisos para gestionar Solicitudes */
        String solicitud = "";
        int i;
        for (i=0; i<8;i++) {
            String aux = req.getParameter("solicitud_"+i);
            if ("0".equals(aux))
                solicitud += "1";
            else
                solicitud += "0";
        }        
        /* Permisos para gestionar Secciones */
        String seccion = "";        
        for (i=0; i<4;i++) {
            String aux = req.getParameter("seccion_"+i);
            if ("0".equals(aux)) {
                seccion += "1";
                System.out.println("Seccion "+i+" SI");
            } else {
                seccion += "0";
                System.out.println("Seccion "+i+" NO");
            }
        }        
        /* Permisos para gestionar Servicios */
        String servicio = "";        
        for (i=0; i<4;i++) {
            String aux = req.getParameter("servicio_"+i);
            if ("0".equals(aux))
                servicio += "1";
            else
                servicio += "0";
        }     
        /* Permisos para gestionar Recursos */
        String recurso = "";        
        for (i=0; i<4;i++) {
            String aux = req.getParameter("recurso_"+i);
            if ("0".equals(aux))
                recurso += "1";
            else
                recurso += "0";
        }     
        /* Permisos para gestionar Colas */
        String cola = "";        
        for (i=0; i<4;i++) {
            String aux = req.getParameter("cola_"+i);
            if ("0".equals(aux))
                cola += "1";
            else
                cola += "0";
        }   
        /* Permisos para gestionar Usuarios */
        String usuario = "";        
        for (i=0; i<4;i++) {
            String aux = req.getParameter("usuario_"+i);
            if ("0".equals(aux))
                usuario += "1";
            else
                usuario += "0";
        } 
        /* Permisos para gestionar Perfiles */
        String perfil = "";        
        for (i=0; i<4;i++) {
            String aux = req.getParameter("perfil_"+i);
            if ("0".equals(aux))
                perfil += "1";
            else
                perfil += "0";
        } 
        
        Perfil p = new Perfil();
        p.setNombre(nombre);
        p.setPermisoSolicitud(solicitud);
        p.setPermisoSeccion(seccion);
        p.setPermisoServicio(servicio);
        p.setPermisoRecurso(recurso);
        p.setPermisoCola(cola);
        p.setPermisoUsuario(usuario);
        p.setPermisoPerfil(perfil);
        if (ingreso) 
            i = Insercion.insertarPerfil(p);
        else {
            int idPerfil = Integer.parseInt((String)req.getParameter("idPerfil")); 
            p.setId(idPerfil);            
            i = Actualizacion.actualizarPerfil(p);            
        }
        
        String mensaje_perfil;
        if (i == 2000) {
            if (ingreso)
                mensaje_perfil = "El Perfil se ingres� exitosamente.";
            else
                 mensaje_perfil = "El Perfil se actualiz� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_perfil", "ok");
        }
        else if (i == 23505) {
            if (ingreso) 
                mensaje_perfil = "El perfil ya existe. No se puede ingresar.";
            else
                mensaje_perfil = "Ocurri� un error al intentar actualizar el perfil.";
        } else
            if (ingreso) 
                mensaje_perfil = "Ocurrio un error al intentar ingresar el perfil.";
            else
                mensaje_perfil = "Ocurri� un error al intentar actualizar el perfil.";
        
        req.getSession().setAttribute("mensaje_perfil", mensaje_perfil);        
        if (ingreso)
            res.sendRedirect("ingresar_datos_perfil.jsp");
        else
            res.sendRedirect("modificar_datos_perfil.jsp?id="+p.getId());
        
    }
    
    private static void ingresarDatosRecurso(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException {
                
        int vacio = 0;
        
        if (!(validarCampo("nombre_recurso", "mensaje_name_recurso", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_name_recurso", "ok");
            vacio = 1;
        }
        if (!(validarCampo("lista_tipo_recurso", "mensaje_tipo_recurso", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_tipo_recurso", "ok");
            vacio = 1;
        }
        if (!(validarCampo("lista_marca_recurso", "mensaje_marca_recurso", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_marca_recurso", "ok");
            vacio = 1;
        }
        if (!(validarCampoEspecial("numero_bien", "[0-9]*", "mensaje_num_bien_recurso",
                "S�lo caracteres num�ricos", req))) {
            req.getSession().setAttribute("ingres_num_bien_recurso", "ok");
            vacio = 1;
        }
        if (vacio == 1) {
            res.sendRedirect("ingresar_datos_recurso.jsp");
            return;
        }
        
        String nombre = capitalizar(((String)req.getParameter("nombre_recurso")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_recurso").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());        
        int tipoRecurso = Integer.parseInt(req.getParameter("lista_tipo_recurso"));
        int marcaRecurso = Integer.parseInt(req.getParameter("lista_marca_recurso"));
        int nroBien = 0;
        String numeroBien = (String) req.getParameter("numero_bien").trim();
        if (!(numeroBien.isEmpty()))
            nroBien = Integer.parseInt(numeroBien);
        
        Recurso rec = new Recurso();
        rec.setNombre(nombre);
        rec.setDescripcion(descripcion);
        rec.setTipoRecurso(tipoRecurso);
        rec.setMarcaRecurso(marcaRecurso);
        rec.setNumeroBien(nroBien);
        System.out.println("Antes de insertar");
        int i = Insercion.insertarRecurso(rec);
        System.out.println("Despues de insertar");
        String mensaje_recurso;
        
        if (i == 2000) {
            mensaje_recurso = "El Recurso se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_recurso", "ok");            
        }
        else if (i == 23505) {
            mensaje_recurso = "El recurso ya existe. No se puede ingresar.";
        } else {
            mensaje_recurso = "Ocurrio un error al intentar ingresar el recurso.";
        }
       
        req.getSession().setAttribute("mensaje_recurso", mensaje_recurso);
        res.sendRedirect("ingresar_datos_recurso.jsp");
        
    }
    
    private static void ingresarDatosServicio(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        
        String a = "lista_seccion";
        String b = "ERROR__lista_seccion";
        String c = "Campo obligatorio.";
        int secc_id = -1;
        
        req.getSession().setAttribute("MSG__estado", null);
        
        if (validarLista(a, b, c, req)) {
            /* El usuario indico una opcion en la lista de secciones */
            String tmp = req.getParameter("lista_seccion");
            secc_id = Integer.parseInt(tmp);
        } else {
            res.sendRedirect("ingresar_datos_servicio.jsp");
            return;
        }       
        
        int vacio = 0;
        
        if (!(validarCampo("nombre_servicio", "ingres_name_serv", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_serv", "Campo obligatorio");
            vacio = 1;
        }
        
        if (!(validarCampoEspecial("num_camp", "[0-9]*", "mensaje_num_camp_serv",
                "S�lo caracteres num�ricos", req))) {
            req.getSession().setAttribute("ingres_num_camp_serv", "ok");
            vacio = 1;
        }
        
        if (!(validarCampoEspecial("num_rec", "[0-9]*", "mensaje_num_rec_serv",
                "S�lo caracteres num�ricos", req))) {
            req.getSession().setAttribute("ingres_num_rec_serv", "ok");
            vacio = 1;
        }
        
        if (vacio == 1) {
            res.sendRedirect("ingresar_datos_servicio.jsp");
            return;
        }
        
        String aux = req.getParameter("num_camp");
        boolean hayCampo = !( aux == null || aux.trim().isEmpty());
        if (hayCampo)
            hayCampo = !((Integer.parseInt((String)aux.trim()) == 0));
        aux = req.getParameter("num_rec");
        boolean hayRec = !( aux == null || aux.trim().isEmpty());
        if (hayRec)
            hayRec = !((Integer.parseInt((String)aux.trim()) == 0));
        
        String nombre = capitalizar(((String) req.getParameter("nombre_servicio")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_servicio").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        String num = (String) req.getParameter("num_camp").trim();
        String num1 = (String) req.getParameter("num_rec").trim();
        
        Servicio serv = new Servicio();
        serv.setNombre(nombre);
        serv.setDescripcion(descripcion);
        serv.setSeccion(secc_id);
        int id;
        try {   /* Inserto la servicio en la BD */
                id = Insercion.insertarServicio(serv);
                System.out.println("ID SERVICIO: "+id);
                req.getSession().setAttribute("id_servicio", id+"");
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "No se puede agregar el servicio.";
                    req.getSession().setAttribute("mensaje_serv", msg);                    
                    res.sendRedirect("ingresar_datos_servicio.jsp");
                    return;
                }
            }
        
        String mensaje_serv = "El Servicio '"+nombre+"' se ingres� exitosamente.";
        
        if (hayCampo && hayRec) {
            req.getSession().setAttribute("num_camp", num);
            req.getSession().setAttribute("num_rec", num1);
            res.sendRedirect("ingresar_datos_campo_solicitud.jsp");
            return;
                        
        } else if (!hayCampo && hayRec) {
            req.getSession().setAttribute("num_camp", null);
            req.getSession().setAttribute("num_rec", num1);
            res.sendRedirect("ingresar_datos_campo_solicitud.jsp");
            return;

        } else if (hayCampo && !hayRec) {
            req.getSession().setAttribute("num_camp", num);
            req.getSession().setAttribute("num_rec", null);
            res.sendRedirect("ingresar_datos_campo_solicitud.jsp");
            return;
            
        }
        
        req.getSession().setAttribute("tipo_mensaje_serv", "ok");
        req.getSession().setAttribute("mensaje_serv", mensaje_serv);
        
        res.sendRedirect("ingresar_datos_servicio.jsp");
        return;
        
    }
    
    private static void ingresarDatosUsuario(HttpServletRequest req, HttpServletResponse res,
            int ingreso) throws IOException, ServletException{
        
        int vacio = 0;
        
        if (ingreso == 1) {
            if (!(validarCampoEspecial("id_usuario", "[0-9]+([0-9]|-)*", "mensaje_id_user",
                    "Campo obligatorio", "S�lo caracteres num�ricos", req))) {
                req.getSession().setAttribute("ingres_id_user", "ok");
                vacio = 1;
            }
        }
        if (!(validarCampo("nombre_usuario", "mensaje_name_user", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_name_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampo("apellido_usuario", "mensaje_apellido_user", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_apellido_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampoEspecial("telefono_usuario", "[0-9]+([0-9]|-)*", "mensaje_tlf_user",
                "Campo obligatorio", "S�lo caracteres num�ricos", req))) {
            req.getSession().setAttribute("ingres_tlf_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampoEspecial("email_usuario", "[A-Za-z\\d][\\w\\-\\.]*\\@\\w+(\\.\\w+)+",
                "mensaje_email_user", "Campo obligatorio", "Formato incorrecto", req))) {
            req.getSession().setAttribute("ingres_email_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampo("perfil_usuario", "mensaje_perfil_user", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_perfil_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampo("lista_secciones", "mensaje_secc_user", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_secc_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampo("password1_usuario", "mensaje_pass1_user", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_pass1_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampo("password2_usuario", "mensaje_pass2_user", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_pass2_user", "ok");
            vacio = 1;
        }
        
        if (!(validarCampo("nickname_usuario", "mensaje_nick_user", "Campo obligatorio", req))) {
            req.getSession().setAttribute("ingres_nick_user", "ok");
            vacio = 1;
        }
        
        if (vacio == 1) {
            if (ingreso == 1) {
                res.sendRedirect("ingresar_datos_usuario.jsp");
            } else {
                res.sendRedirect("consultar_datos_usuario.jsp");
            }
            return;
        }
        
        String password = (String) req.getParameter("password1_usuario");
        String password2 = (String) req.getParameter("password2_usuario");
        
        if (!(password.equals(password2))) {
            req.getSession().setAttribute("ingres_pass1_user", "ok");
            req.getSession().setAttribute("mensaje_pass1_user", 
                    "Las contrase�as no coinciden.");
            if (ingreso == 1) {
                res.sendRedirect("ingresar_datos_usuario.jsp");
            } else {
                res.sendRedirect("modificar_datos_usuario.jsp");
            }
            return;
        }
        int id;
        
            id = Integer.parseInt((String)(req.getParameter("id_usuario")));
        String nombre = capitalizar(((String) req.getParameter("nombre_usuario")).trim().toLowerCase());
        String apellido = capitalizar(((String) req.getParameter("apellido_usuario")).trim().toLowerCase());
        String telefono = (String) req.getParameter("telefono_usuario").trim();
        String email = ((String) req.getParameter("email_usuario")).trim().toLowerCase();
        String profesion;
        if (!(((String) req.getParameter("profesion_usuario")).isEmpty()))
            profesion = capitalizar(((String) req.getParameter("profesion_usuario")).trim().toLowerCase());
        else
            profesion = "No especificada";
        int perfil = Integer.parseInt(req.getParameter("perfil_usuario").trim());
        int seccion = Integer.parseInt(req.getParameter("lista_secciones"));
        String nickname = (String) req.getParameter("nickname_usuario").trim();
        
        UsuarioServidor usr = new UsuarioServidor(id, nombre, apellido, telefono,
                email, profesion, perfil, password, nickname, seccion);
        
        //cambios MS
        int i = -1;
        if (ingreso == 1) {
            i = Insercion.insertarUsuarioServidor(usr);            
        } else {            
            try {                
                i = Actualizacion.actualizarUsuario(usr);
               
            } catch (Exception e) {
                
            }
        }
        //fin cambios MS
        
        String mensaje_usuario_servidor;
        
        if (i == 2000) {
            if (ingreso ==1 ) {
                mensaje_usuario_servidor = "El Usuario se ingres� exitosamente.";
            } else {
                mensaje_usuario_servidor = "El Usuario se modific� exitosamente.";
            }
            req.getSession().setAttribute("tipo_mensaje_usuario_servidor", "ok");
        }
        else if (i == 23505)
            mensaje_usuario_servidor = "El usuario ya existe. No se puede ingresar.";
        else
            if (ingreso ==1 ) {
                mensaje_usuario_servidor = "Ocurri� un error al intentar ingresar el usuario.";        
             } else {
                mensaje_usuario_servidor = "Ocurri� un error al intentar modificar el usuario.";     
             }
        req.getSession().setAttribute("mensaje_usuario_servidor", mensaje_usuario_servidor);
        
        if (ingreso == 1) {
                res.sendRedirect("ingresar_datos_usuario.jsp");
            } else {
                res.sendRedirect("consultar_datos_usuario.jsp");
            }
        
    }
    
    private void ingresarDatosDepartamento(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        if (!(validarCampo("nombre_dpto", "ingres_name_dpto", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_dpto", "Campo obligatorio");
            res.sendRedirect("ingresar_datos_depto.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_dpto")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_dpto").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        Departamento dep = new Departamento();
        dep.setNombre(nombre);
        dep.setDescripcion(descripcion);
        
        int i = Insercion.insertarDepartamento(dep);
        
        String mensaje_dpto;
        
        if (i == 2000) {
            mensaje_dpto = "El Departamento se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_dpto", "ok");
        }
        else if (i == 23505)
            mensaje_dpto = "El departamento ya existe. No se puede ingresar.";
        else
            mensaje_dpto = "Ocurrio un error al intentar ingresar el departamento.";
                
        req.getSession().setAttribute("mensaje_dpto", mensaje_dpto);
        
        res.sendRedirect("ingresar_datos_depto.jsp");
        return;
    }
    
    private void ingresarDatosMarca(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        if (!(validarCampo("nombre_marca", "ingres_name_marca", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_marca", "Campo obligatorio");
            res.sendRedirect("ingresar_datos_marca_recurso.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_marca")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_marca").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        MarcaRecurso mr = new MarcaRecurso();
        mr.setNombre(nombre);
        mr.setDescripcion(descripcion);
        
        int i = Insercion.insertarMarcaRecurso(mr);
        
        String mensaje_marca;
        
        if (i == 2000) {
            mensaje_marca = "La Marca se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_marca", "ok");
        }
        else if (i == 23505)
            mensaje_marca = "La marca ya existe. No se puede ingresar.";
        else
            mensaje_marca = "Ocurrio un error al intentar ingresar la marca.";
                
        req.getSession().setAttribute("mensaje_marca", mensaje_marca);
        
        res.sendRedirect("ingresar_datos_marca_recurso.jsp");
        return;
    }
    
    private void ingresarEstado(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        
        if (!(validarCampo("nombre_estado", "ingres_name_estado", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_estado", "Campo obligatorio");
            res.sendRedirect("ingresar_estado_sol.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_estado")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_estado").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        Estado edo = new Estado();
        edo.setNombre(nombre);
        edo.setDescripcion(descripcion);
        
        int i = Insercion.insertarEstado(edo);
        
        String mensaje_estado;
        
        if (i == 2000) {
            mensaje_estado = "El Estado se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_estado", "ok");
        }
        else if (i == 23505)
            mensaje_estado = "El estado ya existe. No se puede ingresar.";
        else
            mensaje_estado = "Ocurrio un error al intentar ingresar el estado.";
                
        req.getSession().setAttribute("mensaje_estado", mensaje_estado);
        
        res.sendRedirect("ingresar_estado_sol.jsp");
        return;
    }
    
    private void ingresarPrioridad(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        
        if (!(validarCampo("nombre_prioridad", "ingres_name_prioridad", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_prioridad", "Campo obligatorio");
            res.sendRedirect("ingresar_prioridad_sol.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_prioridad")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_prioridad").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        Prioridad p = new Prioridad();
        p.setNombre(nombre);
        p.setDescripcion(descripcion);
        
        int i = Insercion.insertarPrioridad(p);
        
        String mensaje_prioridad;
        
        if (i == 2000) {
            mensaje_prioridad = "La Prioridad se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_prioridad", "ok");
        }
        else if (i == 23505)
            mensaje_prioridad = "La propiedad ya existe. No se puede ingresar.";
        else
            mensaje_prioridad = "Ocurrio un error al intentar ingresar la propiedad.";
                
        req.getSession().setAttribute("mensaje_prioridad", mensaje_prioridad);
        
        res.sendRedirect("ingresar_prioridad_sol.jsp");
        return;
    }
    
    private void ingresarTipoRecurso(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        
        if (!(validarCampo("nombre_tipo_recurso", "ingres_name_tipo_recurso", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_tipo_recurso", "Campo obligatorio");
            res.sendRedirect("ingresar_tipo_recurso.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_tipo_recurso")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_tipo_recurso").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        TipoRecurso tr = new TipoRecurso();
        tr.setNombre(nombre);
        tr.setDescripcion(descripcion);
        
        int i = Insercion.insertarTipoRecurso(tr);
        
        String mensaje_tipo_recurso;
        
        if (i == 2000) {
            mensaje_tipo_recurso = "El Tipo se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_tipo_recurso", "ok");
        }
        else if (i == 23505)
            mensaje_tipo_recurso = "El tipo ya existe. No se puede ingresar.";
        else
            mensaje_tipo_recurso = "Ocurrio un error al intentar ingresar el tipo.";
              
        req.getSession().setAttribute("mensaje_tipo_recurso", mensaje_tipo_recurso);
        
        res.sendRedirect("ingresar_tipo_recurso.jsp");
        return;
    }
    
    private void ingresarTipoSolicitante(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        
        if (!(validarCampo("nombre_tipo_sol", "ingres_name_tipo_sol", "ok", req))) {
            req.getSession().setAttribute("mensaje_name_tipo_sol", "Campo obligatorio");
            res.sendRedirect("ingresar_tipo_sol.jsp");
            return;
        }
        
        String nombre = capitalizar(((String) req.getParameter("nombre_tipo_sol")).trim().toLowerCase());
        
        String descripcion = (String) req.getParameter("desc_tipo_sol").trim();
        if (!(descripcion.isEmpty()))
            descripcion = capitalizar(descripcion.toLowerCase());
        
        TipoSolicitante ts = new TipoSolicitante();
        ts.setNombre(nombre);
        ts.setDescripcion(descripcion);
        
        int i = Insercion.insertarTipoSolicitante(ts);
        
        String mensaje_tipo_sol;
        
        if (i == 2000) {
            mensaje_tipo_sol = "El Tipo de Solicitante se ingres� exitosamente.";
            req.getSession().setAttribute("tipo_mensaje_tipo_sol", "ok");
        }
        else if (i == 23505)
            mensaje_tipo_sol = "El tipo ya existe. No se puede ingresar.";
        else
            mensaje_tipo_sol = "Ocurrio un error al intentar ingresar el tipo.";
        
        
        req.getSession().setAttribute("mensaje_tipo_sol", mensaje_tipo_sol);
        
        res.sendRedirect("ingresar_tipo_sol.jsp");
        return;
    }
    
    private void ingresarDatosCampos(HttpServletRequest req, HttpServletResponse res)
    throws IOException {
        
        String idServ = (String) req.getSession().getAttribute("id_servicio");
        int id_serv = Integer.parseInt(idServ);
        Servicio serv = new Servicio();
        serv.setId(id_serv);
        
        int i = 0;
        int vacio = 0;
        String aux = (String) req.getSession().getAttribute("num_camp");
        int num_campos = Integer.parseInt(aux);
        aux = (String) req.getSession().getAttribute("num_rec");
        int num_recursos = Integer.parseInt(aux);
        
        /* Chequeo que los nombres de los campos no sean vacios */
        while (i < num_campos) {
            aux = req.getParameter("nombre_campo"+i);
            if (aux == null || aux.trim().isEmpty()) {
                req.getSession().setAttribute("ingres_name_campo"+i, "ok");
                req.getSession().setAttribute("mensaje_name_campo"+i, "Campo obligatorio");
                vacio = 1;
            }
            i++;
        }
        
        i = 0;
        /*Chequeo que las listas de recursos tengan un valor*/
        while (i < num_recursos) {
            if (!(validarCampo("lista_recursos"+i, "mensaje_lista_recursos"+i, "Campo obligatorio", req))) {
                req.getSession().setAttribute("ingres_lista_recursos"+i, "ok");
                vacio = 1;
            }
            i++;
        }
        
        i = 0;
               
        if (vacio == 1) {
            res.sendRedirect("ingresar_datos_campo_solicitud.jsp");
            return;
        }
     
        i = 0;
        /* Ingreso los campos */
        while (i < num_campos) {
            CampoSolicitud campoSol = new CampoSolicitud();
            
            String nombre_campo = req.getParameter("nombre_campo"+i);
            campoSol.setNombre(nombre_campo);          
            
            try {   /* Inserto los campos en la BD */
                campoSol.setId(Insercion.insertarCampoSolicitud(campoSol));
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar el " +
                            "servicio en la base de datos.";
                    req.getSession().setAttribute("mensaje_serv", msg);
                    res.sendRedirect("ingresar_datos_servicio.jsp");
                    return;
                }                   
            }
             try {
                Insercion.insertarServicioCampoSolicitud(serv, campoSol);
             } catch (SQLException exp) {
                 System.out.println("atrapo excepcion en insertarServicioCampoSolicitud");
                    if (!exp.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar el " +
                        "servicio en la base de datos.";
                    req.getSession().setAttribute("mensaje_serv", msg);
                    res.sendRedirect("ingresar_datos_servicio.jsp");
                    return;
                }
            }
            i++;
        }        
        i = 0;
        /* Ingreso los recursos */
        while (i < num_recursos) {
            Recurso rec = new Recurso();
            int id_rec = Integer.parseInt(req.getParameter("lista_recursos"+i));
            rec.setId(id_rec);
            Insercion.insertarServicioIncluyeRecurso(serv,rec);
            i++;
        }
        
        req.getSession().setAttribute("tipo_mensaje_serv", "ok");
        String mensaje_serv = "El Servicio se ingres� exitosamente.";
        req.getSession().setAttribute("mensaje_serv", mensaje_serv);
        res.sendRedirect("ingresar_datos_servicio.jsp");
        return;
    }
    
    public static void conectarse(String u, String p, HttpSession ses)
    throws ServletException, IOException {
        
        UsuarioServidor usr = (UsuarioServidor) Consultas.usuarioValido(u, p);
        if (usr != null){
            ses.setAttribute("usr_logged", usr); /* OJO: esto indica que existe una sesion. Falta colocarlo en la pagina de admin_login.jsp */
            ses.setAttribute("error", null);
        } else {
            ses.setAttribute("error", "Nombre de usuario o contrase&ntilde;a inv&aacute;lidos.");
        }
    }
    
    private boolean validarIngresoSolicitud(HttpServletRequest req,
            HttpServletResponse res) {
        
        String vacio = "Campo obligatorio.";
        String invalido = "Formato incorrecto.";
        String tmp = "";
        
        boolean valido = true;
        
        /* 'Restaura' todos los mensajes de error */
        req.getSession().setAttribute("ERROR__usuario_solicitante", null);
        req.getSession().setAttribute("ERROR__ci_solicitante", null);
        req.getSession().setAttribute("ERROR__nombre_solicitante", null);
        req.getSession().setAttribute("ERROR__apellido_solicitante", null);
        req.getSession().setAttribute("ERROR__telefono_solicitante", null);
        req.getSession().setAttribute("ERROR__email_solicitante", null);
        req.getSession().setAttribute("ERROR__lista_tipos_solicitante", null);      
        req.getSession().setAttribute("ERROR__lista_tipos_servicio", null);
        req.getSession().setAttribute("ERROR__lista_usuarios_servidor", null);
        req.getSession().setAttribute("ERROR__lista_prioridades", null);
        
        if (req.getParameter("usuario_sol").equals("0")) {
            /* El usuario dejo marcada la opcion 'Escoger usuario existente' */
            
            /* Valida la cedula de identidad del usuario */
            valido = valido & validarCampoEspecial("usuario_solicitante",
                    "\\d+", "ERROR__usuario_solicitante",
                    vacio, invalido, req);
            
        } else {
            /* El usuario dejo marcada la opcion 'Escoger usuario nuevo' */
            
            /* Valida la cedula de identidad del usuario */
            valido = valido &
                    validarCampoEspecial("ci_solicitante", "\\d+",
                    "ERROR__ci_solicitante", vacio, invalido, req);
            
            /* Valida el nombre del usuario */
            valido = valido &
                    validarCampo("nombre_solicitante",
                    "ERROR__nombre_solicitante", vacio, req);
            
            /* Valida el apellido del usuario */
            valido = valido &
                    validarCampo("apellido_solicitante",
                    "ERROR__apellido_solicitante", vacio, req);
            
            /* Valida el telefono del usuario */
            valido = valido &
                    validarCampoEspecial("telefono_solicitante", "\\d+",
                    "ERROR__telefono_solicitante", vacio, invalido, req);
            
            /* Valida el email del usuario */
            valido = valido &
                    validarCampoEspecial("email_solicitante",
                    "[A-Za-z\\d][\\w\\-\\.]*\\@\\w+(\\.\\w+)+",
                    "ERROR__email_solicitante", vacio, invalido, req);
            
            valido = valido & validarLista("lista_tipos_solicitante",
                    "ERROR__lista_tipos_solicitante", vacio, req);
        }      
        
        if (req.getParameter("asignar") != null) {
            valido = valido & validarLista("lista_usuario_servidor",
                    "ERROR__lista_usuario_servidor", vacio, req);
        }
        
        valido = valido & validarLista("lista_prioridades",
                "ERROR__lista_prioridades", vacio, req);
        
        return valido;
    }
    
    private boolean validarModificacionSolicitud(HttpServletRequest req,
            HttpServletResponse res) {
        
        String vacio = "Campo obligatorio.";
        String invalido = "Formato incorrecto.";
        String tmp = "";
        
        boolean valido = true;
        
        /* 'Restaura' todos los mensajes de error */
        req.getSession().setAttribute("ERROR__usuario_solicitante", null);
        req.getSession().setAttribute("ERROR__ci_solicitante", null);
        req.getSession().setAttribute("ERROR__nombre_solicitante", null);
        req.getSession().setAttribute("ERROR__apellido_solicitante", null);
        req.getSession().setAttribute("ERROR__telefono_solicitante", null);
        req.getSession().setAttribute("ERROR__email_solicitante", null);


            valido = valido &
                    validarCampoEspecial("ci_solicitante", "\\d+",
                    "ERROR__ci_solicitante", vacio, invalido, req);
            
            /* Valida el nombre del usuario */
            valido = valido &
                    validarCampo("nombre_solicitante",
                    "ERROR__nombre_solicitante", vacio, req);
            
            /* Valida el apellido del usuario */
            valido = valido &
                    validarCampo("apellido_solicitante",
                    "ERROR__apellido_solicitante", vacio, req);
            
            /* Valida el telefono del usuario */
            valido = valido &
                    validarCampoEspecial("telefono_solicitante", "\\d+",
                    "ERROR__telefono_solicitante", vacio, invalido, req);
            
            /* Valida el email del usuario */
            valido = valido &
                    validarCampoEspecial("email_solicitante",
                    "[A-Za-z\\d][\\w\\-\\.]*\\@\\w+(\\.\\w+)+",
                    "ERROR__email_solicitante", vacio, invalido, req);

        return valido;
    }
    
    public static Vector obtenerUltimasSolicitudes(int id, int num, int codigo) {
        
        //codigo: 1 para obtener rechazadas
        //codigo: 0 para obtener todas
        
        Vector v = new Vector();        
        try {
            v = Consultas.ultimasNSolicitudes(id, num, codigo);
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
       public static Vector obtenerUltimasSolicitudesEstados(int id, int num, int codigo, int edo) {
        
        //codigo 1: no asignadas
        //codigo 2: asignadas
           
           
        Vector v = new Vector();        
        try {
            v = Consultas.ultimasNSolicitudesEstados(id, num, codigo, edo);
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
    
    
    
    
    
    
    public static String obtenerEstadoSolicitud (int idEdo) {
        String edo = "";
        
        try {
            edo = Consultas.EstadoSolicitud(idEdo);
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return edo;
    }
    
     public static int obtenerIdEstadoSolicitud (String Edo) {
        int idEdo = -1;
        
        try {
            idEdo = Consultas.idEstadoSolicitud(Edo);
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return idEdo;
    }
    
    public static String obtenerPrioridadSolicitud (int idPrio) {
        String prio = "";
        
        try {
            prio = Consultas.PrioridadSolicitud(idPrio);
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return prio;
    }
    
    public static String obtenerServicioSolicitud (int idSol) {
        String serv = "";
        
        try {
            int i = 1;
            String[] v = new String[2];
            v = Consultas.ServicioSolicitud(idSol); 
            serv = v[1];
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return serv;
    }
    
    public static void desconectarse(HttpSession ses){
        ses.setAttribute("usr_logged",null);
        ses.setAttribute("PermisoSolicitud",null);
        ses.setAttribute("PermisoSeccion",null);
        ses.setAttribute("PermisoServicio",null);
        ses.setAttribute("PermisoRecurso",null);
        ses.setAttribute("PermisoCola",null);
        ses.setAttribute("PermisoUsuario",null);
        ses.setAttribute("PermisoPerfil",null);       
        
        ses.invalidate();
        System.gc();
    }
    
    private static String capitalizar(String in) {
        char[] tmp = in.toCharArray();
        char aux = '\0';
        
        aux = Character.toUpperCase(tmp[0]);
        tmp[0] = aux;
        
        return String.copyValueOf(tmp);
    }
    
    public static Vector solicitantes(int numRegistros)
    throws SQLException {
        Vector v = new Vector();
        
        v = FachadaDatos.Consultas.solicitantes(numRegistros);
        
        return v;
    }
    
    public static Solicitante verDetalleSolicitante(int id)
    throws SQLException {
        
        Solicitante s = new Solicitante();        
        s = FachadaDatos.Consultas.detallesSolicitante(id);
        
        return s;
    }
    
    public static String tipoSolicitante(int id)
    throws SQLException {
        
        String s = "";        
        s = FachadaDatos.Consultas.tipoSolicitante(id);
        
        return s;
    }
        
    public static Vector tiposSolicitante()
    throws SQLException {
        Vector v = new Vector();
        
        v = FachadaDatos.Consultas.tiposSolicitante();
        
        return v;
    }
    
    public static Vector tiposRecurso()
    throws SQLException {
        Vector v = new Vector();
        
        v = FachadaDatos.Consultas.tiposRecurso();
        
        return v;
    }
    
    public static Vector marcasRecurso()
    throws SQLException {
        Vector v = new Vector();
        
        v = FachadaDatos.Consultas.marcasRecurso();
        
        return v;
    }
    
    public static Vector secciones()
    throws SQLException {
        Vector v = new Vector();        
        v = FachadaDatos.Consultas.secciones();
        
        return v;
    }
    
    public static Vector departamentos()
    throws SQLException {
        Vector v = new Vector();        
        v = FachadaDatos.Consultas.departamentos();        
        return v;
    }
    
    public static Vector perfiles()
    throws SQLException {
        Vector v = new Vector();        
        v = FachadaDatos.Consultas.perfiles();        
        return v;
    }
    
    public static Vector recursos()
    throws SQLException {
        Vector v = new Vector();
        
        v = FachadaDatos.Consultas.recursos();
        
        return v;
    }
    
    public static int usuarioAsignado(int idSol)
    throws SQLException {
       int idUsr = -1;
        try {
            idUsr = FachadaDatos.Consultas.usuarioAsignado(idSol);           
       } catch (ServletException e) {}
       catch (IOException e) {}
       return idUsr;
    }
    
    private static boolean validarCampo(final String nombreCampo,
            final String destERR, final String errMsg, HttpServletRequest req) {
        
        String aux = req.getParameter(nombreCampo);
        boolean campoNoValido = ( aux == null || aux.trim().isEmpty() );
        
        if (campoNoValido) {
            /* El campo esta vacio o contiene espacios unicamente */
            req.getSession().setAttribute(destERR, errMsg);
            return false;
        }
        
        return true;
    }
    
    private static boolean validarCampoEspecial(final String nombreCampo,
            final String regexp, final String destERR, final String errMsg,
            HttpServletRequest req) {
        
        String aux = req.getParameter(nombreCampo);
        boolean campoNoValido = ( aux == null || aux.trim().isEmpty() );
        
        if (!campoNoValido && !Pattern.matches(regexp, aux)) {
            /* El campo puede tener contenido no valido */
            req.getSession().setAttribute(destERR, errMsg);
            return false;
        }
        
        return true;
    }
    
    private static boolean validarCampoEspecial(final String nombreCampo,
            final String regexp, final String destERR, final String errMsg1,
            final String errMsg2, HttpServletRequest req) {
        
        String aux = req.getParameter(nombreCampo);
        boolean campoNoValido = ( aux == null || aux.trim().isEmpty() );
        
        if (campoNoValido) {
            /* El campo esta vacio o contiene espacios unicamente */
            req.getSession().setAttribute(destERR,errMsg1);
            return false;
            
        } else if (!campoNoValido && !Pattern.matches(regexp, aux)) {
            /* El campo puede tener contenido no valido */
            req.getSession().setAttribute(destERR, errMsg2);
            return false;
        }
        
        return true;
    }
    
    private static boolean validarLista(final String nombreLista,
            final String destERR, final String errMsg,
            HttpServletRequest req) {
        
        String aux = req.getParameter(nombreLista);
        
        boolean listaNoValida = ( aux == null || aux.equals("-1"));
        
        if (listaNoValida) {
            req.getSession().setAttribute(destERR, errMsg);
            return false;
        }
        return true;
    }
    
    public static String eliminarCeros(String in) {
        String out = in;
        char[] ca = in.toCharArray();
        int     i = 0;
        
        while (ca[i] == '0') {
            System.out.println(ca[i]);
            i++;
        }
        
        out = String.copyValueOf(ca, i, ca.length - i);
        return out;
    }
    
    private void preIngresoSolicitud(HttpServletRequest req, 
            HttpServletResponse res) throws IOException {
        
        Servicio srvc = null;
        String a = "lista_tipos_servicio";
        String b = "ERROR__lista_tipos_servicio";
        String c = "Campo obligatorio.";
        
        req.getSession().setAttribute("MSG__estado", null);
        
        if (validarLista(a, b, c, req)) {
            /* El usuario indico una opcion en la lista de servicios */
            String tmp = req.getParameter("lista_tipos_servicio");
            int srvc_id = Integer.parseInt(tmp);
            System.out.println("Servicio: "+srvc_id);
            try {
            srvc = Consultas.verDetallesServicio (srvc_id);
            } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
            }
            //srvc = new Servicio(srvc_id, "", "", -1);
            
            req.getSession().setAttribute("__servicio", srvc);
            res.sendRedirect("ingresar_datos_solicitud_1.jsp");
            return;

        }
        res.sendRedirect("ingresar_datos_solicitud.jsp");
        return;
    }
    
    private void insertarCampos(final Solicitud sd, HttpServletRequest req) {
        int i = 0;
        Vector v = (Vector) req.getSession().getAttribute("__campos");
        
        while (i < v.size() && (v != null)) {
            CampoSolicitud cs = (CampoSolicitud) v.get(i);
            String valorCampo = req.getParameter("campo_" + i);
            Insercion.insertarSolicitudCampoSolicitud(sd, cs, valorCampo);
            i++;
        }
        
            /* "Detacho" el atributo __campos de la variable 'session' *
             * porque no lo necesito mas                               */
        req.getSession().setAttribute("__campos", null);
    }
    
    public static Vector obtenerServicios()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.serviciosDelSistema();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
    
    public static Solicitud Solicitud(int id)
    throws IOException {                
        Solicitud sol = new Solicitud();        
        try {
            sol = Consultas.verDetallesSolicitud(id);                         
            
        } catch (ServletException e) {}
        return sol;

    }
    
    public static Solicitante Solicitante(int id)
    throws IOException {                
        Solicitante sol = new Solicitante();
        try {
            sol = Consultas.detallesSolicitante(id);                         
            
        } catch (SQLException e) {}
        return sol;

    }
    
    public static String[] verDetallesSolicitud(int id)
    throws IOException {        
        
        Solicitud sol = new Solicitud();
        String[] solicitud = new String[10];
        try {
            sol = Consultas.verDetallesSolicitud(id);            
           
            java.util.Date f = sol.getFechaRealizacion();                      
            
            solicitud[0] = "" + f.getDate() + " / " + (f.getMonth()+1) + " / " + (f.getYear()+1900);
            solicitud[1] = sol.getDescripcion();  
            solicitud[2] = Consultas.EstadoSolicitud(sol.getEstado());          
            solicitud[3] = Consultas.PrioridadSolicitud(sol.getPrioridad());
            solicitud[4] = Consultas.ColaSolicitud(sol.getCola());
            solicitud[5] = "" + sol.getPosCola();
            solicitud[6] = "" + sol.getSolicitante();
            String[] v = new String[2];
            v = Consultas.ServicioSolicitud(id);  
            solicitud[7] = v[1];
            solicitud[8] = v[0];
            solicitud[9] = Consultas.SeccionSolicitud(sol.getCola());
        } catch (ServletException e) {}
        return solicitud;

    }
    public static Vector camposServicio(int sol, int serv)
    throws IOException {
        
        Vector v = new Vector();
        v = Consultas.getCampoValorAsociado(sol, serv);
        return v;
        
    }
    
     public static Vector recursosServicio(int serv)
    throws IOException {
        
        Vector v = new Vector();
        v = Consultas.getRecursosAsociados(serv);        
        return v;
        
    }
    
    private static void eliminarSolicitud(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numSol = Integer.parseInt(req.getParameter("numSol"));
        numSol = (numSol/3);        
        String Sols[] = new String[numSol];
        int i = 0;
        while ( i < numSol) {
            String aux = req.getParameter("sol_"+i);
            int id  = Integer.parseInt(req.getParameter("idsol_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarSolicitud(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "solicitud en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("solicitudes.jsp");
    }
    
    private static void asignarSolicitud(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
           
     
        String a = "lista_usuario_servidor";
        String b = "ERROR__lista_usuario_servidor";
        String c = "Campo obligatorio.";
        int usr_id = -1;
        
        req.getSession().setAttribute("MSG__estado", null);
        
        if (validarLista(a, b, c, req)) {
            /* El usuario indico una opcion en la lista de servicios */
            String tmp = req.getParameter("lista_usuario_servidor");
            usr_id = Integer.parseInt(tmp);
            System.out.println("Usuario: "+usr_id);
            
        } else {
            res.sendRedirect("asignar_solicitud.jsp");
            return;
        }       
            
        java.util.Date fecha = new java.util.Date();
        String hora = fecha.getHours() + ":" + fecha.getMinutes() + ":" +
                      fecha.getSeconds();
        int numSol = Integer.parseInt(req.getParameter("numSol"));        
        numSol = numSol/3;
        
        int i = 0;
        while ( i < numSol) {
            String aux = req.getParameter("sol_"+i);
            System.out.println("Id Sol: "+ aux);
            int idSol  = Integer.parseInt(req.getParameter("idsol_"+i));            
            if ("0".equals(aux)) {    
                int idEdo = -1;
                 try {
                     idEdo = Consultas.idEstadoSolicitud("Asignada");
                 } catch (ServletException ex) {
                 } catch (IOException ex) {}
                try {
                    Actualizacion.actualizarEstado(idSol, idEdo);
                } catch (ServletException ex) {
                } catch (IOException ex) {}
                try {
                    Actualizacion.actualizarAsignacion(idSol, usr_id, fecha, hora);
                    
                } catch (SQLException ex) {
                    if (!ex.getSQLState().equals("02000")) {
                        String msg = "Ocurri� un error al intentar actualizar " +
                                "la solicitud en la base de datos.";
                        req.getSession().setAttribute("MSG__estado", msg);
                        return;
                    }
                }                           
              
            }
            i++;
        }
        res.sendRedirect("solicitudes.jsp");
    }
    
    private static void redireccionarSolicitud(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
           
     
        String a = "lista_departamento";
        String b = "ERROR__lista_departamento";
        String c = "Campo obligatorio.";
        int idDpto  = -1;
        int idSeccion  = -1;
        
        req.getSession().setAttribute("MSG__estado", null);
        
        if (validarLista(a, b, c, req)) {
            /* El usuario indico una opcion en la lista de servicios */
            String tmp = req.getParameter("lista_departamento");
            String[] result = tmp.split("\\s");
            idDpto = Integer.parseInt(result[0]);
            idSeccion = Integer.parseInt(result[1]);
            
        } else {
            res.sendRedirect("redireccionar_solicitud.jsp");
            return;
        }       
            
        java.util.Date fecha = new java.util.Date();
        String hora = fecha.getHours() + ":" + fecha.getMinutes() + ":" +
                      fecha.getSeconds();
        int numSol = Integer.parseInt(req.getParameter("numSol"));        
        numSol = numSol/3;
        String Sols[] = new String[numSol];
        int i = 0;
        while ( i < numSol) {
            String aux = req.getParameter("sol_"+i);
            System.out.println("Id Sol: "+ aux);
            int idSol  = Integer.parseInt(req.getParameter("idsol_"+i));            
            if ("0".equals(aux)) {                   
                try {
                   
                    Actualizacion.actualizarAsignacionSeccion(idSol, idDpto, idSeccion, fecha, hora);
                    
                } catch (SQLException ex) {
                    if (!ex.getSQLState().equals("02000")) {
                        String msg = "Ocurri� un error al intentar actualizar " +
                                "la solicitud en la base de datos.";
                        req.getSession().setAttribute("MSG__estado", msg);
                        return;
                    }
                }                           
              
            }
            i++;
        }
        res.sendRedirect("solicitudes.jsp");
    }
     
 private static void cerrarSolicitud(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException {        
   
        int numSol = Integer.parseInt(req.getParameter("numSol"));
        numSol = (numSol/3);        
        String Sols[] = new String[numSol];
        int i = 0;
        int edo = Consultas.idEstadoSolicitud("Cerrada");        
        while ( i < numSol) {
            String aux = req.getParameter("sol_"+i);
            int id  = Integer.parseInt(req.getParameter("idsol_"+i));             
            if ("0".equals(aux)) {               
                Actualizacion.actualizarEstado(id, edo);
            }
            i++;
        }
        res.sendRedirect("solicitudes.jsp");
    }
 
  private static void finalizarSolicitud(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException {        
   
        int numSol = Integer.parseInt(req.getParameter("numSol"));
        numSol = (numSol/3);        
        String Sols[] = new String[numSol];
        int i = 0;
        int edo = Consultas.idEstadoSolicitud("Finalizada");        
        while ( i < numSol) {
            String aux = req.getParameter("sol_"+i);
            int id  = Integer.parseInt(req.getParameter("idsol_"+i));             
            if ("0".equals(aux)) {               
                Actualizacion.actualizarEstado(id, edo);
            }
            i++;
        }
        res.sendRedirect("solicitudes.jsp");
    }
     
  private static void reabrirSolicitud(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException {        
   
        int numSol = Integer.parseInt(req.getParameter("numSol"));
        numSol = (numSol/3);        
        String Sols[] = new String[numSol];
        int i = 0;
        int edo = Consultas.idEstadoSolicitud("No asignada");        
        while ( i < numSol) {
            String aux = req.getParameter("sol_"+i);
            int id  = Integer.parseInt(req.getParameter("idsol_"+i));             
            if ("0".equals(aux)) {               
                Actualizacion.actualizarEstado(id, edo);
            }
            i++;
        }
        res.sendRedirect("solicitudes.jsp");
    }
       
    public static void obtenerSolicitudes(HttpServletRequest req, HttpServletResponse res)
    throws IOException 
    {
        
        String clave = req.getParameter("clave_busqueda");        
        Vector v = new Vector();
        if (clave != "") {
             try {
                v = Consultas.buscarSolicitudes(clave);
            } catch (Exception e) {
                /* Ocurrio algun problema con la base de datos */
                e.printStackTrace();
            }
        }
            req.getSession().setAttribute("vector", v);
            res.sendRedirect("busqueda.jsp");       
    }
    
        public static Vector obtenerSecciones()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.seccionesDelSistema();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
    
       public static Vector obtenerPerfiles()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.perfilesDelSistema();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }    
        
    public static Vector obtenerSeccionesDpto(int idDpto)
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.seccionesDeDpto(idDpto);
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
        
    private static void eliminarSeccion(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numSec = Integer.parseInt(req.getParameter("numSec"));        
        String Secs[] = new String[numSec];
        int i = 0;
        while ( i < numSec) {
            String aux = req.getParameter("sec_"+i);
            int id  = Integer.parseInt(req.getParameter("idsec_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarSeccion(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "seccion en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("secciones.jsp");
    }
    
    private static void eliminarPerfil(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numPer = Integer.parseInt(req.getParameter("numPer"));        
        String Pers[] = new String[numPer];
        int i = 0;
        while ( i < numPer) {
            String aux = req.getParameter("per_"+i);
            int id  = Integer.parseInt(req.getParameter("idper_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarPerfil(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "seccion en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("perfil.jsp");
    }
    
    private static void eliminarServicio(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numSev = Integer.parseInt(req.getParameter("numSev"));        
        String Sevs[] = new String[numSev];
        int i = 0;
        while ( i < numSev) {
            String aux = req.getParameter("sev_"+i);
            int id  = Integer.parseInt(req.getParameter("idsev_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarServicio(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "seccion en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("servicios.jsp");
    }

        
    public static String[] verDetallesPerfil(int id)
    throws IOException {        
        
        Perfil p = new Perfil();
        String[] perfil = new String[8];
        try {
            p = Consultas.verDetallesPerfil(id);             
           
                          
            perfil[0] = p.getPermisoSolicitud();
            perfil[1] = p.getPermisoSeccion();  
            perfil[2] = p.getPermisoServicio();
            perfil[3] = p.getPermisoRecurso();
            perfil[4] = p.getPermisoCola();
            perfil[5] = p.getPermisoUsuario();
            perfil[6] = p.getPermisoPerfil();
            perfil[7] = p.getNombre();
            
        } catch (ServletException e) {}
        return perfil;

    }
    
    private void modificarSolicitud(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {            


        
        Solicitante     st = null;
        String desc = req.getParameter("descripcion_solicitante"); 
        String id_solicitud = req.getParameter("id_solicitud"); 
     
        /* Primero un poco de validacion sobre los campos del formulario */
        
            String tmp = req.getParameter("cedula_solicitante");
            String nombre = req.getParameter("nombre_solicitante");
            String apellido = req.getParameter("apellido_solicitante");
            String email = req.getParameter("email_solicitante");           
            int id_solicitante = Integer.parseInt(eliminarCeros(tmp));
            
            tmp = req.getParameter("telefono_solicitante");
            int telf_solicitante = Integer.parseInt(eliminarCeros(tmp));
            
            int tipo_solicitante =
                    Integer.parseInt(req.getParameter("lista_tipos_solicitante"));
                        
            st = new Solicitante(id_solicitante, nombre, apellido,
                    telf_solicitante, email, tipo_solicitante);
       
            try {   /* Inserto la solicitud en la BD */
                Actualizacion.actualizarSolicitante(st);
                Actualizacion.actualizarSolicitud(id_solicitud, desc);
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "solicitud en la base de datos.";                    
                    req.getSession().setAttribute("TIPO__MSG__estado", "err");
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
            res.sendRedirect("solicitudes.jsp");
    }
    
public static Servicio Servicio(int id)
    throws IOException {                
        Servicio serv = new Servicio();        
        try {
            serv = Consultas.verDetallesServicio(id);                         
            
        } catch (ServletException e) {}
        return serv;

    }
private void modificarServicio(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {          
        
        Servicio s = null;        
        int id_servicio = Integer.parseInt(req.getParameter("id_servicio"));         
        /* Primero un poco de validacion sobre los campos del formulario */        
        String nombre = req.getParameter("nombre_servicio");
        String descripcion = req.getParameter("desc_servicio");
        int seccion =
                Integer.parseInt(req.getParameter("lista_seccion"));
                        
        s = new Servicio(id_servicio, nombre, descripcion, seccion);
       
            try {   /* Inserto la solicitud en la BD */
                Actualizacion.actualizarServicio(s);                   
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "solicitud en la base de datos.";                    
                    req.getSession().setAttribute("TIPO__MSG__estado", "err");
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
        res.sendRedirect("servicios.jsp");
    }

//nuevos (Gio):
   private static void eliminarRecurso(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numRec = Integer.parseInt(req.getParameter("numRec"));        
        String Recs[] = new String[numRec];
        int i = 0;
        while ( i < numRec) {
            String aux = req.getParameter("rec_"+i);
            int id  = Integer.parseInt(req.getParameter("idrec_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarRecurso(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar el " +
                            "recurso en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("recursos.jsp");
    }
    
    public static Vector obtenerRecursos()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.recursosDelSistema();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
    
     public static Vector obtenerUsuarios()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.usuariosDelSistema();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
    
       private static void eliminarUsuario(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numUsr = Integer.parseInt(req.getParameter("numUsr"));        
        String Usrs[] = new String[numUsr];
        int i = 0;
        while ( i < numUsr) {
            String aux = req.getParameter("usr_"+i);
                        
            if ("0".equals(aux)) {               
                try {
                    int id  = Integer.parseInt(req.getParameter("idusr_"+i));
                    int j = Eliminacion.eliminarUsuario(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar el " +
                            "usuario en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("ingresar_datos_usuario.jsp");
    }
  
        private static void eliminarDepartamento(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numDep = Integer.parseInt(req.getParameter("numDep"));        
        String Deps[] = new String[numDep];
        int i = 0;
        while ( i < numDep) {
            String aux = req.getParameter("dep_"+i);
            int id  = Integer.parseInt(req.getParameter("iddep_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarDepartamento(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar el " +
                            "usuario en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("administracion.jsp");
    }
        
        private static void eliminarMarca(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numMar = Integer.parseInt(req.getParameter("numMar"));        
        String Mars[] = new String[numMar];
        int i = 0;
        while ( i < numMar) {
            String aux = req.getParameter("mar_"+i);
            int id  = Integer.parseInt(req.getParameter("idmar_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarMarca(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar la " +
                            "marca en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("marca_recurso.jsp");
    }
        
        private static void eliminarTipoSolicitante(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numSol = Integer.parseInt(req.getParameter("numSol"));        
        String Sols[] = new String[numSol];
        int i = 0;
        while ( i < numSol) {
            String aux = req.getParameter("sol_"+i);
            int id  = Integer.parseInt(req.getParameter("idsol_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarTipoSolicitante(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar el " +
                            "usuario en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("administracion.jsp");
    }
        
        public static Vector obtenerTipoRecursos()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.tiposRecurso();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
    
            private static void eliminarTipoRecurso(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numRec = Integer.parseInt(req.getParameter("numRec"));        
        String Recs[] = new String[numRec];
        int i = 0;
        while ( i < numRec) {
            String aux = req.getParameter("rec_"+i);
            int id  = Integer.parseInt(req.getParameter("idrec_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarTipoRecurso(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar el " +
                            "usuario en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("administracion.jsp");
    }
    
        public static Vector obtenerEstados()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.estados();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
        
        public static Vector obtenerPrioridades()
    {
        Vector v = new Vector();
        
        try {
            v = Consultas.prioridades();
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }
        
             private static void eliminarEstado(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numEdo = Integer.parseInt(req.getParameter("numEdo"));        
        String Edos[] = new String[numEdo];
        int i = 0;
        while ( i < numEdo) {
            String aux = req.getParameter("edo_"+i);
            int id  = Integer.parseInt(req.getParameter("idedo_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarEstado(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar el " +
                            "estado en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("administracion.jsp");
    }
             
             private static void eliminarPrioridad(HttpServletRequest req, HttpServletResponse res)
    throws IOException {        
   
        int numPri = Integer.parseInt(req.getParameter("numPri"));        
        String Pris[] = new String[numPri];
        int i = 0;
        while ( i < numPri) {
            String aux = req.getParameter("pri_"+i);
            int id  = Integer.parseInt(req.getParameter("idpri_"+i));            
            if ("0".equals(aux)) {               
                try {
                    int j = Eliminacion.eliminarPrioridad(id);
                    
                } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar eliminar la " +
                            "prioridad en la base de datos.";
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
                
              
            }
            i++;
        }
        res.sendRedirect("administracion.jsp");
    }  
    
        

  
//nuevas cosas (MS):
public static UsuarioServidor Usuario(int id)
    throws IOException {                
        UsuarioServidor usr = new UsuarioServidor();        
        try {
            usr = Consultas.usuario(id);                         
            
        } catch (ServletException e) {}
        return usr;

    }

private void modificarSeccion(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {          
        
        Seccion s = null;        
        int id_seccion = Integer.parseInt(req.getParameter("id_seccion"));         
        /* Primero un poco de validacion sobre los campos del formulario */        
        String nombre = req.getParameter("nombre_seccion");
        String descripcion = req.getParameter("desc_seccion");
        int departamento =
                Integer.parseInt(req.getParameter("lista_departamento"));
                        
        s = new Seccion(id_seccion, nombre, descripcion, departamento);
       
            try {   /* Inserto la solicitud en la BD */
                Actualizacion.actualizarSeccion(s);                   
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar insertar la " +
                            "solicitud en la base de datos.";                    
                    req.getSession().setAttribute("TIPO__MSG__estado", "err");
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
        res.sendRedirect("secciones.jsp");
    }     
public static Seccion Seccion(int id)
    throws IOException {                
        Seccion sec = new Seccion();        
        try {
            sec = Consultas.verDetallesSeccion(id);                         
            
        } catch (ServletException e) {}
        return sec;

    }
//nuevo MS (28/05/08)
public static Perfil Perfil (int id) {
    Perfil p = new Perfil();
    try {
        p = Consultas.verDetallesPerfil(id);
        
    } catch (Exception e) {
        
    }
    return p;
}

public static Vector obtenerSolicitudesPorCola(int id, int num, int codigo, int seccion) {
        
        
        Vector v = new Vector();        
        try {
            v = Consultas.SolicitudesPorCola(id, num, codigo,0, seccion);
            
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        
        return v;
    }

public static void busquedaAvanzada(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {
    
    boolean fechaI = false, fechaF = false;
    boolean recurso = false;
    String aux = req.getParameter("recurso");
    if ("0".equals(aux))
        recurso = true;
    boolean servicio = false;
    aux = req.getParameter("servicio");
    if ("0".equals(aux))
        servicio = true;
    boolean usuario = false;
    aux = req.getParameter("usuario");
    if ("0".equals(aux))
       usuario = true;
    boolean descripcion = false;
    aux = req.getParameter("descripcion");
    if ("0".equals(aux))
        descripcion = true;
    boolean ci_solicitante = false;
    aux = req.getParameter("ci_solicitante");
    if ("0".equals(aux))
        ci_solicitante = true;
    boolean nombre_solicitante = false;
    aux = req.getParameter("nombre_solicitante");
    if ("0".equals(aux))
        nombre_solicitante = true;
    
    int id_prioridad = -10, id_soltipo = -10, id_estado = -10, id_seccion = -10;
    // si la DST sigue usando este sistema despues del 31 de diciembre de 9999 tendran que cambiar esto
    java.util.Date fecha_inic = java.sql.Date.valueOf("9999-12-31"), 
            fecha_fin = java.sql.Date.valueOf("1900-01-01"); 
    String aux1 ="",aux2="",clave = "";            
    
        id_prioridad = Integer.parseInt(req.getParameter("prioridades"));
        id_soltipo = Integer.parseInt(req.getParameter("soltipos"));
        id_estado = Integer.parseInt(req.getParameter("estados"));
        id_seccion = Integer.parseInt(req.getParameter("secciones"));
    if (!req.getParameter("MyDate").equals("")) {
        fechaI = true;
        aux1 = req.getParameter("MyDate");
        aux2 = ""+aux1.charAt(6)+aux1.charAt(7)+
                aux1.charAt(8)+aux1.charAt(9)+"-"+aux1.charAt(3)+aux1.charAt(4)+
                "-"+aux1.charAt(0)+aux1.charAt(1);
        fecha_inic = java.sql.Date.valueOf(aux2);
    } if (! (req.getParameter("MyDate2")).equals("")) {
        fechaF = true;
        aux1 = req.getParameter("MyDate2");
        aux2 = ""+aux1.charAt(6)+aux1.charAt(7)+
                aux1.charAt(8)+aux1.charAt(9)+"-"+aux1.charAt(3)+aux1.charAt(4)+
                "-"+aux1.charAt(0)+aux1.charAt(1);
        fecha_fin = java.sql.Date.valueOf(aux2);
    } if (req.getParameter("clave") != null)
        clave = req.getParameter("clave");    
    
    Vector v = new Vector();        
        try {
            v = Consultas.buscarSolicitudesAvanzada(recurso,servicio,usuario,
                    descripcion,ci_solicitante,nombre_solicitante,id_prioridad,
                    id_soltipo,id_estado,id_seccion,fecha_inic,fecha_fin,fechaI,fechaF,clave);
            req.getSession().setAttribute("vector", v);
            
        } catch (Exception e) {
            /* Ocurrio algun problema con la base de datos */
            e.printStackTrace();
        }
        res.sendRedirect("busqueda.jsp");
}
public static Estado Estado(int id)
    throws IOException {                
        Estado edo = new Estado();        
        try {
            edo = Consultas.intEstado(id);                         
            
        } catch (ServletException e) {}
        return edo;

    }

private void modificarEstado(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {          
        
        Estado s = null;        
        int id_estado = Integer.parseInt(req.getParameter("id_estado"));         
        /* Primero un poco de validacion sobre los campos del formulario */        
        String nombre = req.getParameter("nombre_estado");
        String descripcion = req.getParameter("desc_estado");
                        
        s = new Estado(id_estado, nombre, descripcion);
       
            try {   /* Inserto la solicitud en la BD */
                Actualizacion.actualizarDatosEstado(s);                   
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar modificar el  " +
                            "estado en la base de datos.";                    
                    req.getSession().setAttribute("TIPO__MSG__estado", "err");
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
        res.sendRedirect("estado.jsp");
    }     

public static Departamento Departamento(int id)
    throws IOException {                
        Departamento dto = new Departamento();        
        try {
            dto = Consultas.intDepartamento(id);                         
            
        } catch (ServletException e) {}
        return dto;

    }

private void modificarDepartamento(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {          
        
        Departamento s = null;        
        int id_departamento = Integer.parseInt(req.getParameter("id_departamento"));         
        /* Primero un poco de validacion sobre los campos del formulario */        
        String nombre = req.getParameter("nombre_departamento");
        String descripcion = req.getParameter("desc_departamento");
                        
        s = new Departamento(id_departamento, nombre, descripcion);
       
            try {   /* Inserto la solicitud en la BD */
                Actualizacion.actualizarDatosDepartamento(s);                   
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar modificar el  " +
                            "estado en la base de datos.";                    
                    req.getSession().setAttribute("TIPO__MSG__estado", "err");
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
        res.sendRedirect("departamentos.jsp");
    }     

public static Prioridad Prioridad(int id)
    throws IOException {                
        Prioridad pri = new Prioridad();        
        try {
            pri = Consultas.intPrioridad(id);                         
            
        } catch (ServletException e) {}
        return pri;

    }

private void modificarPrioridad(HttpServletRequest req,
            HttpServletResponse res) throws ServletException, IOException {          
        
        Prioridad s = null;        
        int id_prioridad = Integer.parseInt(req.getParameter("id_prioridad"));         
        /* Primero un poco de validacion sobre los campos del formulario */        
        String nombre = req.getParameter("nombre_prioridad");
        String descripcion = req.getParameter("desc_prioridad");
                        
        s = new Prioridad(id_prioridad, nombre, descripcion);
       
            try {   /* Inserto la solicitud en la BD */
                Actualizacion.actualizarDatosPrioridad(s);                   
            } catch (SQLException ex) {
                if (!ex.getSQLState().equals("02000")) {
                    String msg = "Ocurri� un error al intentar modificar el  " +
                            "estado en la base de datos.";                    
                    req.getSession().setAttribute("TIPO__MSG__estado", "err");
                    req.getSession().setAttribute("MSG__estado", msg);
                    return;
                }
            }
        res.sendRedirect("prioridad.jsp");
    }     



}